/**
 * 定义系统级别的事件
 * @author zhf
 * @email manban@126.com
 *  
 * 
 * data-target 代表需要发生http请求的事件,value如下：
 *		1.close  表示单击该按钮关闭弹出层 
 				依赖:弹出层对象[data-container="#container"]
 *		2.new  表示单击该按钮将弹出添加页面 
 				依赖:弹出层对象	[data-container="#container"]
 				依赖:弹出窗口url	[data-href="aa.do"]
 *		3.batchedit  表示单击该按钮将弹出修改页面，参数将从复选框中取。 
 				依赖:弹出层对象	[data-container="#container"]
 				依赖:弹出窗口url	[data-href="aa.do"]
 *		4.delete  表示单击该按钮将删除该条纪录，参数将从url中取,请求完成刷新页面。 
 				依赖:回调表单对象	[data-callbackform="#callbackform"]
 				依赖:请求url	[data-href="aa.do"]
 *		5.batchdelete  表示单击该按钮批量删除纪录，参数将从复选框中取,请求完成刷新页面。 
 				依赖:回调表单对象	[data-callbackform="#callbackform"]
 				依赖:弹出窗口url	[data-href="aa.do"]
 *		6.ajax  表示单击该按钮将向后台进行ajax请求,参数将从url中取,请求完成刷新页面。 
 				依赖:回调表单对象	[data-callbackform="#callbackform"]
 				依赖:弹出窗口url	[data-href="aa.do"]
 *		7.batchajax  表示单击该按钮将向后台进行ajax请求,参数将从复选框中中取,请求完成刷新页面。 
 				依赖:回调表单对象	[data-callbackform="#callbackform"]
 				依赖:弹出窗口url	[data-href="aa.do"]
 				可选项
 				依赖:需要关闭的弹出层对象	[data-container="#container"]
 *		8.submit  表示单击该按钮将通过异步提交该表单,请求完成刷新页面，
 					一般场景是添加,修改完成后点击的提交按钮 
 				依赖:弹出层对象	[data-container="#container"]
 				依赖:回调表单对象	[data-callbackform="#callbackform"]
 * data-type   代表普通预定义事件
 *				[data-type=checkbox]全选或者取消的选择框
 *
 * data-container		代表弹出层对象
 * data-callbackform 	代表在请求事件处理完成以后要查询的表单,比如新增操作完成后需要刷新当前列表
 	
 	上述功能执行完后的回调写法
 	//在id=ajax按钮功能完成以后执行的回调方法
	$("#ajax").on("callback",function(event,data){
		alert(data.code);
	});
 */
function alertMsg(msg,level){
	alert(msg);
}
$(function(){
	

	jQuery.fn.center = function(loaded) {
		var obj = this;
		body_width = parseInt($(window).width());
		body_height = parseInt($(window).height());
		block_width = parseInt(obj.width());
		block_height = parseInt(obj.height());
		
		left_position = parseInt((body_width/2) - (block_width/2)  + $(window).scrollLeft());
		if (body_width<block_width) { left_position = 0 + $(window).scrollLeft(); };
		
		top_position = parseInt((body_height/2) - (block_height/2) + $(window).scrollTop());
		if (body_height<block_height) { top_position = 0 + $(window).scrollTop(); };
	
		if(!loaded) {
		
			top_position = body_height/5 + $(window).scrollTop();//可能页面加载会在center调用之后导致定位不准确,所以固定高度为固定
			
			obj.css({'position': 'absolute'});
			obj.animate({ 'top': top_position, 'left': left_position });
			$(window).bind('resize', function() { 
				obj.center(!loaded);
			});
			$(window).bind('scroll', function() { 
				obj.center(!loaded);
			});
			
		} else {
			obj.stop();
			obj.css({'position': 'absolute'});
			obj.animate({ 'top': top_position }, 200, 'linear');
		}
	}
	
	/** 表单全选/取消(本table) **/
	$(document).on('click.data.api.checkbox.checkall',"[data-type=checkbox]",function(e){
		var $check = $("[type=checkbox]",$(this).closest("table"));
		var checked = $(this).is(":checked");
		$check.attr("checked",checked);

	});
	
	/** 弹出层关闭按钮 **/
	$(document).on('click.data.api.button.close',"[data-target=close]",function(e){
		e.preventDefault();
		var $container = $($(this).data("container"));
		$container.fadeOut(function(){ $('#screen').remove();$("select").show(); });
	});
	
	    /** 排序选项**/
    $(document).on('click.data.api.click.order',"[data-order]",function(e){
 		e.preventDefault();
 		var $this = $(this);
 		var $form = $($this.data("form"));
 		
        var orders = $form.data("orders");
        if(orders && orders == $this.data("order")+"-"+"1"){
            $form.data("orders",$this.data("order")+"-"+"0");
        }else{
            $form.data("orders",$this.data("order")+"-"+"1");
        }
 	    
        $form.submit();
		
 	});
	
	/** 增加(本页面) **/
	$(document).on('click.data.api.button.new',"[data-target=new]",function(e){
		e.preventDefault();
		var $container = $($(this).data("container"));
		var url = $(this).data('href');
		var $screen = $("<div id=\"screen\" class=\"mask\"></div>").appendTo("body");
		var h = $(document).height();
		$screen.css({ 'height': h });	
		$screen.show();
		$("select").hide();
		$container.css({zIndex:"999"}).load(url,{"rant" : Math.random()},function(){
			$screen.removeClass("mask");$container.fadeIn(function(){$container.center();});
			
		});
		return false;
		 
	});
	
	/** 修改(本页面)向后抬传递checkbox的值 **/
	$(document).on('click.data.api.button.batchedit',"[data-target=batchedit]",function(e){
		e.preventDefault();
		var $this = $(this);
		var $container = $($(this).data("container"));
		var url = $(this).data('href');
		//在pager插件中已经预设置过选定的值
		var values = $(this).data("pagervalue");
		if($.type(values)=='undefined'){alert("配置错误！");return false;}
		if(values=='')return false;
		if(values=='manyvalues'){alertMsg("只能选择一项！");return false;}
		$container.show().load(url,$.param({"id":values},true));
		 
	});
	
	/** 通过href删除 **/
	$(document).on('click.data.api.href.delete',"[data-target=delete]",function(e){
 		e.preventDefault();
 		var $this = $(this);
 		var $callbackform = $($(this).data("callbackform"));
 		if(confirm("您确定要删除吗？")){
	 		$.post($(this).data("href"),{rant:Math.random},function(data){
	 			if($.type(data)=="string")
 					data = $.parseJSON(data);
	 			if(data.code==200){
	 				alertMsg("删除成功！", "success");
	 				try{
	 					$callbackform.submit();
	 				}catch(e){};
	 			}else{
	 				alertMsg(data.message, "error");
	 			}
	 		},"json").done(function(data){
	 			$this.trigger("callback",data);
	 		});
		}
 	});
	
	
	/** 批量删除传递checkbox中的值 **/
	$(document).on('click.data.api.href.batchdelete',"[data-target=batchdelete]",function(e){
 		e.preventDefault();
 		//在pager插件中已经预设置过选定的值
 		var $this = $(this);
		var values = $(this).data("pagervalue");
		var $callbackform = $($(this).data("callbackform"));
		if($.type(values)=='undefined'){alert("配置错误！");return false;}
		if(values!='')
 		if(confirm("您确定要删除吗？")){
	 		$.post($(this).data("href"),$.param({"checkid":values},true),function(data){
	 			if($.type(data)=="string")
 					data = $.parseJSON(data);
	 			if(data.code==200){
	 				alertMsg("删除成功！", "success");
	 				try{
	 					$callbackform.submit();
	 				}catch(e){};
	 			}else{
	 				alertMsg(data.message, "error");
	 			}
	 		},"json").done(function(data){
 				$this.trigger("callback",data);
 			});
		}
 	});
	
 	/** ajax,如启用,开放等功能 **/
	$(document).on('click.data.api.href.ajax',"[data-target=ajax]",function(e){
 		e.preventDefault();
 		var $this = $(this);
 		var $callbackform = $($(this).data("callbackform"));
 		var $callback = $(this).data("callback");
 		var cal = $.post($(this).data("href"),{rant:Math.random},function(data){
 			if($.type(data)=="string")
 				data = $.parseJSON(data);
 			if(data.code==200){ 			
 				try{
	 				$callbackform.submit();
 				}catch(e){};
 			}else if(data.code==201){ 	
 				alertMsg(data.message, "success");
 				try{
	 				$callbackform.submit();
 				}catch(e){};
 			}else{
 				alertMsg(data.message, "error");
 			}
 		},"json").done(function(data){
 			$this.trigger("callback",data);
 		});
 	});
 	
 	/** ajax,如启用,开放等功能,传递checkbox中的值 **/
	$(document).on('click.data.api.href.batchajax',"[data-target=batchajax]",function(e){
 		e.preventDefault();
 		//在pager插件中已经预设置过选定的值		
 		var $this = $(this);
		var values = $(this).data("pagervalue");
		var $callbackform = $($(this).data("callbackform"));
		var $container = $($(this).data("container"));
		if($.type(values)=='undefined'){alert("配置错误！");return false;}
		if(values!='')
 		$.post($(this).data("href"),$.param({"checkid":values},true),function(data){
 			if($.type(data)=="string")
 				data = $.parseJSON(data);
 			if(data.code==200){
 				try{
 					//隐藏弹出层
 					$container.fadeOut(function(){ $('#screen').remove();$("select").show(); });
 				}catch(e){};
 				try{
	 				$callbackform.submit();
 				}catch(e){};
 			}else if(data.code==201){ 	
 				alertMsg(data.message, "success");
 				try{
 					//隐藏弹出层
 					$container.fadeOut(function(){ $('#screen').remove();$("select").show(); });
 				}catch(e){};
 				try{
	 				$callbackform.submit();
 				}catch(e){};
 			}else{
 				alertMsg(data.message, "error");
 			}
 		},"json").done(function(data){
 			$this.trigger("callback",data);
 		});
 	});
 	
 	
 	/** 增加/修改submit **/
	$(document).on('click.data.api.submit.insert',"[data-target=submit]",function(e){
 		e.preventDefault();
 		var $this = $(this);
 		var $form = $this.closest("form");
 		var $container = $($this.data("container"));
 		var $callbackform = $($this.data("callbackform"));
 		//作表单提交之前的验证
 		$form.data("result",false);
		$form.trigger("vilidate");
		//alert($form.data("result"));		 		
 		if(!$form.data("result")) return;
 		$.post($form.attr("action"),$form.serialize(),function(data){
 			if($.type(data)=="string")
 				data = $.parseJSON(data);
 			if(data.code==200){
 				alertMsg("操作成功！", "success");
 				try{
 					//隐藏弹出层
 					$container.fadeOut(function(){ $('#screen').remove();$("select").show(); });
 				}catch(e){};
 				try{
 					$callbackform.submit();
 				}catch(e){};
 			}else{
 				alertMsg(data.message);
 			}
 		},"json").done(function(data){
 			$this.trigger("callback",data);
 		});
		
 	});
    

	
});